/**
 开发团队 :
 开发人员 : ZBB295
 开发时间 : 2022/8/12 13:24
 文件名称 : app.js
 开发工具 : WebStorm
 */


//引用express框架
const express = require('express');
//引入系统路径模块
const path = require('path');
//创建网站服务器
const app = express();
//引入数据连接
require('./model/connect')
//引入session模块
const session = require('express-session')
//导入art-template模版模块
const template = require('art-template')
//导入dateformat模块,时间格式化
const dateFormat = require('dateformat')

//引入判断是否登录中间件
const loginGuard = require('./middleware/loginGuard')

//引入morgan第三方模块
const morgan = require('morgan')
const config = require('config')


//当渲染art模版时候用的是express-art-template模版
app.engine('art',require('express-art-template'));
//设置模版存放位置 views这个是框架内规定好的
app.set('views',path.join(__dirname,'views'));
//渲染模版不写后缀时候默认是art
app.set('view engine','art');
//向模版内部导入dateFormat变量
template.defaults.imports.dateFormat = dateFormat;



//开放静态资源文件
app.use(express.static(path.join(__dirname,'public')))

console.log(config.get('title'))
//获取系统环境变量，返回值是一个对象
// console.log(process.env.NODE_ENV)
if(process.env.NODE_ENV == 'development'){

    //在开发环境中将客户端发送到服务器端的请求信息打印到控制台上
    console.log('当前是开发环境');
    app.use(morgan('dev'));//属于express的中间件函数
}else {
    console.log('当前是生产环境')
}

//导入路由
const home = require('./route/home.js');
const admin = require('./route/admin.js');

//配置session
app.use(session({resave: false,
                        saveUninitialized: false,
                        secret:'secret key',
                        cookie:{
                            maxAge:24*60*60*100
    }}))
//处理post请求参数,但是不能处理表单的二进制请求参数
app.use(express.urlencoded({extended:false}));

// app.use('/admin',(req,res,next)=>{
//     //判断用户访问的是否是登录页面
//     //判断用户的登录状态
//     //如果用户是登录的，将请求放行
//     //如果不是登录的，将请求重定向到登录页面
//     if (req.url != '/login' && !req.session.username){
//         res.redirect('/admin/login');
//     }else {
//         //用户是登录的状态的 请求放行
//         next();
//     }
//
// })

//为路由匹配请求路径
app.use('/home',home);
app.use('/admin',loginGuard,admin);

//添加错误处理中间件
app.use((err,req,res,next)=>{

    const result = JSON.parse(err);
    //let obj = {path:'/admin/user-edit',message:'密码比对失败不能进用户修改',id:id}
    //循环遍历result对象，因为这个对象中的个数不确定
    let params = [];
    for (let attr  in result) {
        if (attr!='path'){
            params.push(attr + '=' + result[attr]);
        }
    }
    res.redirect(`${result.path}?${params.join('&')}`);
})
//监听端口
app.listen(80,function () {
    console.log('blog服务已启动,请访问localhost')
})